"""
生成安全的 .env 配置文件
自动生成强密码和密钥
"""
import secrets
import os
import sys

# 添加父目录到路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))


def generate_secret_key(length: int = 32) -> str:
    """生成随机密钥"""
    return secrets.token_urlsafe(length)


def generate_password(length: int = 24) -> str:
    """生成强密码"""
    import string
    alphabet = string.ascii_letters + string.digits + "!@#$%^&*"
    password = ''.join(secrets.choice(alphabet) for _ in range(length))
    return password


def generate_env_file():
    """生成 .env 文件"""
    print("=" * 60)
    print("思和智库 - 环境配置生成工具")
    print("=" * 60)
    print()
    
    # 检查是否已存在 .env 文件
    env_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), '.env')
    if os.path.exists(env_path):
        print(f"⚠️  警告：.env 文件已存在！")
        overwrite = input("是否覆盖？(y/N): ").strip().lower()
        if overwrite != 'y':
            print("❌ 取消操作")
            return
        print()
    
    # 收集配置信息
    print("📝 请输入配置信息（直接回车使用默认值）：")
    print()
    
    # 数据库配置
    db_host = input("数据库主机 [localhost]: ").strip() or "localhost"
    db_port = input("数据库端口 [5432]: ").strip() or "5432"
    db_name = input("数据库名称 [shihe_knowledgehub]: ").strip() or "shihe_knowledgehub"
    db_user = input("数据库用户 [postgres]: ").strip() or "postgres"
    
    print("\n🔐 生成数据库密码...")
    db_password = generate_password(24)
    print(f"   密码: {db_password}")
    custom_password = input("   使用自定义密码？(直接回车使用生成的密码): ").strip()
    if custom_password:
        db_password = custom_password
    
    # JWT 配置
    print("\n🔑 生成 JWT 密钥...")
    secret_key = generate_secret_key(32)
    print(f"   密钥: {secret_key[:20]}...")
    
    # Ollama 配置
    print("\n🤖 Ollama 配置：")
    ollama_url = input("Ollama 地址 [http://localhost:11434]: ").strip() or "http://localhost:11434"
    ollama_model = input("LLM 模型 [qwen2.5:14b]: ").strip() or "qwen2.5:14b"
    ollama_embed = input("嵌入模型 [bge-m3]: ").strip() or "bge-m3"
    
    # CORS 配置
    print("\n🌐 CORS 配置：")
    cors_origins = input("允许的前端地址 [http://localhost:3300]: ").strip() or "http://localhost:3300"
    
    # 生成 .env 文件内容
    env_content = f"""# ========================================
# 思和智库 - 环境配置
# ========================================
# ⚠️ 此文件包含敏感信息，请勿提交到 Git！
# 生成时间: {__import__('datetime').datetime.now().strftime('%Y-%m-%d %H:%M:%S')}

# ========================================
# 应用配置
# ========================================
APP_NAME=思和智库
APP_VERSION=2.1.0
ENVIRONMENT=development
HOST=0.0.0.0
PORT=3301
RELOAD=true

# ========================================
# 数据库配置
# ========================================
DATABASE_HOST={db_host}
DATABASE_PORT={db_port}
DATABASE_NAME={db_name}
DATABASE_USER={db_user}
DATABASE_PASSWORD={db_password}
DATABASE_URL=postgresql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}

# ========================================
# JWT 配置
# ========================================
SECRET_KEY={secret_key}
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=43200

# ========================================
# Ollama 配置
# ========================================
OLLAMA_BASE_URL={ollama_url}
OLLAMA_MODEL={ollama_model}
OLLAMA_EMBED_MODEL={ollama_embed}
OLLAMA_EMBED_DIMENSION=1024

# ========================================
# 文件上传配置
# ========================================
UPLOAD_DIR=./data/uploads
KNOWLEDGE_BASE_DIR=./data/knowledge_base
VECTOR_STORE_DIR=./data/vector_store
MAX_FILE_SIZE=104857600

# ========================================
# CORS 配置
# ========================================
CORS_ORIGINS={cors_origins}

# ========================================
# 日志配置
# ========================================
LOG_LEVEL=INFO
LOG_DIR=./data/logs
LOG_ROTATION=10 MB
LOG_RETENTION=30 days
"""
    
    # 写入文件
    with open(env_path, 'w', encoding='utf-8') as f:
        f.write(env_content)
    
    print()
    print("=" * 60)
    print("✅ .env 文件生成成功！")
    print("=" * 60)
    print()
    print(f"📁 文件位置: {env_path}")
    print()
    print("⚠️  重要提示：")
    print("   1. 请妥善保管 .env 文件，不要提交到 Git")
    print("   2. 数据库密码已自动生成，请记录保存")
    print("   3. 如需修改配置，请直接编辑 .env 文件")
    print()
    print(f"🔐 数据库密码: {db_password}")
    print(f"🔑 JWT 密钥: {secret_key[:20]}...")
    print()
    print("=" * 60)


if __name__ == "__main__":
    try:
        generate_env_file()
    except KeyboardInterrupt:
        print("\n\n❌ 操作已取消")
    except Exception as e:
        print(f"\n\n❌ 错误: {str(e)}")
        import traceback
        traceback.print_exc()

